//引入对象
const Koa = require('koa');
const Router=require("koa-router");
const koaBody=require("koa-body");
//导入
const tagRouter=require("./routers/tag.router");
const userRouoter=require("./routers/user.router");
const contentRouter=require("./routers/content.router");
const jwtRouter=require("./routers/jwttest.router");
//所有的路由都起作用引用
const {fail} =require("./toast")
const jwt=require("jsonwebtoken");
const key="web";
//引入内部方法或者属性
//const {方法或者属性名} = require('koa');

//创建对象
const app =new Koa();
app.use(koaBody({
   strict:false  //严格模式 get post都可以使用获取
})); //使用

//所有的路由都起作用
app.use(async (ctx,next)=>{
  const exp=[
    '/login',
    '/register',
    '/'
  ];//存储不需要验证的地址
  //有的路由不需要验证
    if(exp.includes(ctx.url)){
        await next();
        return;
    }

      console.log(ctx.headers);
      const authorization=ctx.headers.authorization;
      //判断
      if(!authorization){
          return fail(ctx,"请添加token信息");
      }
      const token= authorization.split(" ")[1];
      //解密
      try {
          const user=jwt.verify(token, key);
          if(user.name==="admin"){//验证
            await next();
           }else{
              return fail(ctx,"权限不足");
          }
        } catch(error) {
              return fail(ctx,error);
        }
})
const router=new Router();// 创建路由,支持传递参数
tagRouter(router);
userRouoter(router);
contentRouter(router);
jwtRouter(router);

// response 返回路径
// app.use(async (ctx,next) => {
//   ctx.body = 'Hello koa';
//   next();
// });

// router.get("/", async ctx=>{
//   //url参数 ctx.query
//    console.log(ctx.url);
//    console.log(ctx.query);
//    //console.log(ctx.querystring);
// })

// //postman 测试后台结果
// router.post("/a",async ctx=>{
//   console.log(ctx.url);
//   console.log(ctx.request.body);
//   ctx.body="请求成功"
// });
// 调用router.routes()来组装匹配好的路由，返回一个合并好的中间件
// 调用router.allowedMethods()获得一个中间件，当发送了不符合的请求时，会返回 `405 Method Not Allowed` 或 `501 Not Implemented`
app.use(router.routes()),app.use(router.allowedMethods());
//{ 
  // throw: true, // 抛出错误，代替设置响应头状态
  // notImplemented: () => '不支持当前请求所需要的功能',
  // methodNotAllowed: () => '不支持的请求方式'
//}

// localhost:3000 地址
// app.listen(3000);

app.listen(3000, ()=>{
  console.log("http://localhost:3000")
});